Մոդուլ (նախագծման ձևանմուշ)
Մոդուլ | |
---|---|
Տեսակ | Կառուցվածքային |
Նշանակություն | ծրագրավորման մոդուլի հասկացողությունն իրականացնելու համար |
Կառուցվածք | |
Նկարագրությունը ԳօՖի "Design Patterns" գրքում | Ոչ |
Մոդուլ (անգլ.՝ Module), կառուցվածքային նախագծման ձևանմուշ, որն օգտագործվում է ծրագրավորման մոդուլի հասկացողությունն իրականացնելու համար այն ծրագրավորման լեզուներում, որտեղ այդ հասկացողությունը չի սպասարկվում։
Ծրագրավորման լեզվից կախված այս ձևանմուշը կարելի է իրականացնել տարբեր կերպ՝ որպես եզակի օգտագործման ձևանմուշ, օբյեկտ-կողմնորոշված ստատիկ անդամ (անգլ.՝ static member) դասում և պրոցեդուրային գլոբալ ֆունկցիաներում։ Python-ում ձևանմուշը ներկառուցված է լեզվի մեջ և յուրաքանչյուր .py ֆայլը ավտոմատորեն հանդիսանում է մոդուլ։
Ընդհանուր հասկացողություններ
[խմբագրել | խմբագրել կոդը]- Client - հայցող
- Instance - նմուշ
- Implementation - իրականացում
- Product - արգասիք
Նկարագրություն և կառուցվածք
[խմբագրել | խմբագրել կոդը]Մոդուլ ձևանմուշը ապահովում է ֆունկցիաներ և ստատիկ կառուցվածքներ մուդուլային հասկացողությունն այն լեզուներում իրականացնելու համար, որոնք չեն սպասարկում այդ հասկացողությունը։
Հատկանիշներ
[խմբագրել | խմբագրել կոդը]Այս ձևանմուշը եզակի նախագծման կամ այլ խմբի ձևանմուշներով իրականացնելիս պետք է հաշվի առնել, որ ձևանմուշը պետք է ապահովի հետևյալ հատկանիշներին.
- Ծրագրի կոդի մի մասը պետք է լինի գլոբալ կամ ունենա public հասանելիություն որպես գլոբալ կամ public կոդ։ private կամ protected կոդը կարելի է իրականացնել public կոդի միջոցով։
- Մոդուլը պետք է ունենա ինիցիալիզադիայի ֆունկցիա, որը համարժեք է օբյեկտ-կնոստրուկտոր մեթոդին։ Այս հատկանիշը չի սպասարկվում ռեգուլյար
namespace
-ով։ - Մոդուլը պետք է ունենա
finalizer
ֆունկցիա, որն համարժեք է օբյեկտի դեստրուկտորին։ Այս ֆունկցիան նույնպես չի սպասարկվում ռեգուլյարnamespace
-ի կողմից։ - Ֆունկցիաների շատ անդամենր, որոնք գործողություններ են իրականացնում դասի մեջ, տրվում են ֆունկցիայի կանչի արգումենտների տեսքով։ Նմանատիպ ֆունկցիաներ են օրինակ "utilities", "tools" կամ "libraries":
Օրինակներ
[խմբագրել | խմբագրել կոդը]C# (C Sharp .Net)
[խմբագրել | խմբագրել կոդը]Հայտարարում
[խմբագրել | խմբագրել կոդը]using System;
using System.IO;
using System.Text;
namespace Consoles {
public sealed class MainModule {
private static MainModule Singleton = null;
public InputStream input = null;
public OutputStream output = null;
public ErrorStream error = null;
// ...
public MainModule () {
// does nothing on purpose !!!
}
// ...
public MainModule getSingleton() {
if (MainModule.Singleton == null)
{
MainModule.Singleton = new MainModule();
}
return MainModule.Singleton;
}
// ...
public void prepare() {
//System.WriteLine("console::prepare();");
this.input = new InputStream();
this.output = new OutputStream();
this.error = new ErrorStream();
}
public void unprepare() {
this.output = null;
this.input = null;
this.error = null;
//System.WriteLine("console::unprepare();");
}
// ...
public void printNewLine() {
System.Console.WriteLine("");
}
public void printString(String Value) {
System.Console.Write(Value);
}
public void printInteger(Integer Value) {
System.Console.Write(Value);
}
public void printBoolean(Boolean Value) {
System.Console.Write(Value);
}
public void ScanNewLine() {
// to-do: ...
}
public void ScanString(String Value) {
// to-do: ...
}
public void ScanInteger(Integer Value) {
// to-do: ...
}
public void ScanBoolean(Boolean Value) {
// to-do: ...
}
// ...
}
}
Իրականացում
[խմբագրել | խմբագրել կոդը] class ConsoleDemo {
public static Consoles.MainModule Console = null;
public static void prepare()
{
Console = Consoles.MainModule.getSingleton();
Console.prepare();
}
public static void unprepare()
{
Console.unprepare();
}
public static void execute()
{
Console.PrintString("Hello World");
Console.PrintNewLine();
Console.ScanNewLine();
}
public static void main()
{
prepare();
execute(args);
unprepare();
}
}
Java
[խմբագրել | խմբագրել կոդը]Հայտարարում
[խմբագրել | խմբագրել կոդը]package consoles;
import java.io.InputStream;
import java.io.PrintStream;
public final class MainModule {
private static MainModule singleton = null;
public InputStream input = null;
public PrintStream output = null;
public PrintStream error = null;
public MainModule() {
// does nothing on purpose !!!
}
// ...
public static MainModule getSingleton() {
if (MainModule.singleton == null) {
MainModule.singleton = new MainModule();
}
return MainModule.singleton;
}
// ...
public void prepare() {
//System.out.println("consoles::prepare();");
this.input = new InputStream();
this.output = new PrintStream();
this.error = new PrintStream();
}
public void unprepare() {
this.output = null;
this.input = null;
this.error = null;
//System.out.println("consoles::unprepare();");
}
// ...
public void printNewLine() {
System.out.println();
}
public void printString(String value) {
System.out.print(value);
}
public void printInteger(int value) {
System.out.print(value);
}
public void printBoolean(boolean value) {
System.out.print(value);
}
public void scanNewLine() {
// to-do: ...
}
public void scanString(String value) {
// to-do: ...
}
public void scanInteger(int value) {
// to-do: ...
}
public void scanBoolean(boolean value) {
// to-do: ...
}
// ...
}
Իրականացում
[խմբագրել | խմբագրել կոդը]import consoles;
class ConsoleDemo {
public static MainModule console = null;
public static void prepare() {
console = MainModule.getSingleton();
console.prepare();
}
public static void unprepare() {
console.unprepare();
}
public static void execute(String[] args) {
console.printString("Hello World");
console.printNewLine();
console.scanNewLine();
}
public static void main(String[] args) {
prepare();
execute(args);
unprepare();
}
}
|